package com.ryhx.pay.base.app.userinfo.service;// 包名所在行

import java.util.List;
import java.util.Map;

import com.ryhx.pay.base.app.modelUserInfo;//model名引入所在行
import com.ryhx.pay.common.exceptions.BizException;//Exception名引入所在行

public interface UserInfoService{

    /**
    * 根据主键获取实体
    * @param entityId 主键
    * @return
    */
    UserInfo getUserInfo(Long entityId) throws BizException;

    /**
    * 调用mybatis selectOne 如果查询返回超过1条 就会发生异常 请自行处理
    * @param query 入参 调用MapUtil构造
    * @return
    */
    UserInfo selectOneUserInfoWillThrowException(Map<String, Object> query) throws BizException;
    /**
    * 获取满足条件的第一条数据
    * @param query 入参 调用MapUtil构造
    * @return
    */
    UserInfo selectFirstUserInfo(Map<String, Object> query) throws BizException;
    /**
    * 查询实体集合
    * @param query
    * @return
    */
    List<UserInfo> getUserInfoList(Map<String, Object> query) throws BizException;

    /**
    * 查询实体集合的个数
    * @param query
    * @return
    */
    Integer getUserInfoListCount(Map<String, Object> query) throws BizException;

    /**
    * 保存实体 保证userInfo 主键为空
    * @param userInfo
    * @return
    */
    Long  insertUserInfo(UserInfo userInfo) throws BizException;

    /**
    * 智能保存实体 userInfo必须存在主键或者唯一键 根据这个键值查询库里是否存在此条记录 存在则进行替换老的记录 不存在则插入新记录
    * @param userInfo
    * @return
    */
    Long  replaceUserInfo(UserInfo userInfo) throws BizException;

    /**
    * 更新实体 保证实体中的主键不为空
    * @param userInfo
    */
    int updateUserInfo(UserInfo userInfo) throws BizException;

    /**
    * 更新实体 null字段忽略更新
    * @param userInfo
    */
    int updateUserInfoWithoutNull(UserInfo userInfo) throws BizException;

    /**
    * 更新实体 自定义条件
    * @param userInfo   not empty
    * @param whereSql not blank 有sql注入风险 请开发人员自行保证安全性
    */
    int updateUserInfoByWhereSql(Map<String,Object> userInfo,String whereSql) throws BizException;

    /**
    * 根据主键删除实体
    * @param entityId
    */
    int deleteUserInfo(Long entityId) throws BizException;
    /**
    * 删除实体集合
    * @param userInfo 如果字段值不为空 将作为查询条件
    */
    int deleteUserInfoList(Map<String,Object> userInfo) throws BizException;

    /**
    * 根据自定义条件删除实体
    * @param whereSql not blank  有sql注入风险 请开发人员自行保证安全性
    */
    int deleteUserInfoByWhereSql(String whereSql) throws BizException;

    /**
    * 清空实体表
    */
    int truncateUserInfo() throws BizException;

    /**
    *  批量保存实体，保证list中的实体 主键为空
    * @param list
    */
    int batchInsertUserInfo(List<UserInfo> list) throws BizException;

    /**
    *  智能批量保存实体，userInfo必须存在主键或者唯一键 根据这个键值查询库里是否存在此条记录 存在则替换老的记录 不存在则插入新记录
    * @param list
    */
    int batchReplaceUserInfo(List<UserInfo> list) throws BizException;

    /**
    * 批量更新实体 保证list中的实体 主键不为空
    * @param list
    */
    int batchUpdateUserInfo(List<UserInfo> list) throws BizException;

    /**
    * 根据主键list 批量删除实体
    * @param idList
    */
    int batchDeleteUserInfo(List<Long> idList) throws BizException;

    /**
    * 根据主键list 批量删除实体
    * @param userInfoList 如果字段值不为空 将作为查询条件
    */
    int batchDeleteUserInfoList(List<UserInfo> userInfoList) throws BizException;

}
